import java.util.Arrays;

public class ArrayFind {
    //查找元素，法一：一个个找
    public static int find(int[] arr,int val){//要查询的数组，要查询的元素
        for(int i=0;i<arr.length;i++){
            if(arr[i]==val)
                return i;//返回第几个下标
        }
        //查找失败返回-1
        return -1;
    }//效率太慢
    //二分查找法（折半查找法），前提：有序数组
    public static int binarySearch(int[] arr,int val){//假设你传入的数组已经按从小到大排列好
        int left=0;
        int right=arr.length-1;
        while(left<=right){
            int mid=(left+right)/2;
            if(arr[mid]<val){//当中间的元素比你要找的元素小，说明你要找的元素在Mid的右边
                left=mid+1;//把left下边移到Mid+1的位置，重新进入循环
            } else if (arr[mid]>val) {//当中间的元素比你要找的要大，说明你要找的元素在mid的左边
                right=mid-1;//把right移动到mid-1的位置，然后重新进入循环，开始新一轮的mid判断
            }else {//当arr[mid]==val，说明找到了，返回下标Mid告知在数组哪个位置
                return mid;
            }
        }
        return -1;//表示没找到
    }
    //定义一个数组，奇数放在偶数前面
    public static void func(int[] arr){
        int left=0;
        int right=arr.length-1;
        while(left<right){//
            while(left < right && arr[left]%2!=0){//当左边有奇数时，碰到奇数往后走，没碰到就不进入该循环
                left++;//下标往后走
            }
            while(left < right && arr[right]%2==0){//当右边有偶数时，碰到偶数往前走，没碰到就不进入该循环
                right--;//下标往前走
            }
            int tmp=arr[left];//当左标碰到偶数、右标碰到奇数时，
            arr[left]=arr[right];
            arr[right]=tmp;

        }
        System.out.println(Arrays.toString(arr));
    }
    public static void bubbleSort(int[] arr){
        for(int i=0;i<arr.length-1;i++){//5个元素就走4趟，0，1，2，3
            //6个元素就走5趟，0，1，2，3，4
            //如果i=1，6个元素就走，1，2，3，4，5，
            for(int j=0;j<arr.length-1-i;j++){
                    if(arr[j]>arr[j+1]){
                        int tmp=arr[j];
                        arr[j]=arr[j+1];
                        arr[j+1]=tmp;
                    }
            }

        }
    }
    public static void bubbleSort_01(int[] arr){
        for(int i=0;i<arr.length-1;i++){
            boolean flg=false;
            for(int j=0;j<arr.length-1-i;j++){
                if(arr[j]>arr[j+1]){
                    int tmp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=tmp;
                    flg=true;
                }
            }
        if(flg==false){/*当上一趟排完，flg重新赋值为false，下一趟走完后没有进入if语句，flg依然是false，
            说明通过该走完的趟，能验证数组已经排好序，不用进行下一趟的比较*/
            break;//就不进入下一部分的交换了
            }
         }
    }
    //给你一个数组和一个target，请返回数组中两个数的和为target的两数的下标
    public static int[] fun3(int[] arr,int target){
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length; j++) {
                if (arr[i]+arr[j]==target){
                    return new int[]{i,j};
                }
            }

        }
        return new int[]{-1,-1};
    }
    public static int FindNum(int[] arr){
        int ret=arr[0];
        for (int i = 1; i < arr.length; i++) {
            ret^=arr[i];//ret=ret^arr[i];
        }
        return ret;
    }
    public static void main9(String[] args) {
        int[] arr=new int[]{4,2,6,8,1};
        //Arrays.sort(arr);//排序
        //System.out.println(Arrays.toString(arr));
        /*int ret =find(arr,90);
        System.out.println(ret);*/
        //func(arr);
        //binarySearch(arr,33);
       // System.out.println(binarySearch(arr,33));
        //System.out.println(Arrays.binarySearch(arr,44));
        //bubbleSort_01(arr);
        //System.out.println(Arrays.toString(arr));
        //int[] ret=fun3(arr,9);
        //System.out.println(Arrays.toString(ret));
    }

    public static void main10(String[] args) {
        int[] arr=new int[]{11,11,23,23,3,3,5};
        System.out.println(FindNum(arr));
    }
    //给你一个整数数组arr，请你判断数组中是否存在连续三个元素都是奇数的情况：如果存在，返回true,否则返回false
    public static boolean fun5(int[] arr){
        int count=0;
        for (int i=0;i<arr.length;i++) {
            if (arr[i] % 2 != 0) {//说明为奇数
                System.out.println(arr[i]);
                count++;
                if (count==3)
                    return true;
            } else {
                count = 0;
            }
        }
        return false;
    }

    public static void main99(String[] args) {
        int[] arr=new int[]{1,3,6,7,9,13,22,33,45,67,34};
        fun5(arr);
        System.out.println(fun5(arr));
    }
    //二维数组
    public static void main(String[] args) {//三种定义方式
        int[][]arr={{12,23,42},{12,45,67}};//arr.length=2,arr[0].length=3,arr[1].length=3
        int[][]arr1=new int[2][3];
        int[][] arr3=new int[][]{{99,9,0},{9,98,89,90}};
        arr[0][0]=12;
        System.out.println(arr[1]);//输出arr[1]地址
        System.out.println(arr[0]);//输出arr[0]的地址
    }
}
